/***********************************************************************************
 * 文件名： ui_type.h
 * 版本： 1
 * 说明：
 * 		ui类型定义。
 * 修改记录：
 * 	2024/01/10: 初版。 刘言。
***********************************************************************************/
#ifndef _UI_TYPE_H_
#define _UI_TYPE_H_

#include "typedef.h"

// 提前申明 ui_page_base_t
typedef struct _ui_page_base ui_page_base_t;

// 事件代码
typedef enum _ui_ev_code
{
    UI_EV_PAGE_LOADED,      // 页面已加载
    UI_EV_PAGE_UNLOADED,    // 页面已经关闭（稍后删除）
    UI_EV_RECEIVED_PKG,     // 收到一包数据
    _UI_EV_END
}ui_ev_code_t;

// 告警代码
typedef enum _ui_warn_code
{
    UI_WARN_NO_BATTERY,     // 没电，完全没电了，需要关机
    UI_WARN_LOW_BATTERY,    // 电量不足，通常是尝试输出而无法输出时触发
    UI_WARN_OVER_LOAD,      // 过载
    UI_WARN_NO_POD,         // 空载
    UI_WARN_CLEAR_PUFF,     // 清除口数
    UI_WARN_TIMEOUT,         // 超时
    UI_WARN_UPDATE,
    _UI_WARN_END
}ui_warn_code_t;

// 事件
typedef struct _ui_ev
{
    ui_page_base_t * Target;    // 通知目标对象，通常是当前页面
    ui_ev_code_t Code;      // 事件代码
    void * UserData;        // 用户数据
}ui_ev_t;

// 页面创建函数类型
typedef ui_page_base_t * (*ui_page_creat_fun_t)(void *param);

// 页面删除函数类型
typedef void (*ui_page_delete_fun_t)(ui_page_base_t *page);

// 页面事件回调函数类型
typedef void (*ui_cb_t)(ui_ev_t * e);


// 页面基类
typedef struct _ui_page_base
{
    // ui_page_creat_fun_t CreatFun;    // 页面创建函数，调用这个函数来创建页面
    ui_page_delete_fun_t DeleteFun;     // 页面删除函数，调用这个函数来删除页面
    ui_cb_t CallBack;                   // 页面事件回调函数
    void * UserData;                    // 用户数据
}ui_page_base_t;

#endif
